﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication1.Classes;
using WebApplication1.WSDetalheProduto;
using WebApplication1.WSLogistica;

namespace WebApplication1
{
	public partial class Carrinho : System.Web.UI.Page
	{
		WSRegistroControleEstoqueProdutos.Service1 EstoqueServices = new WSRegistroControleEstoqueProdutos.Service1();
		WSLogistica.C06_LogisticaService LogisticaService = new C06_LogisticaService();
		WSDetalheProduto.ServicosService DetalheProdutoServices = new WSDetalheProduto.ServicosService();

		private double _totalPedido;

		protected void Page_Load(object sender, EventArgs e)
		{
			if (Usuario.PedidoAtual.PedidoItems.Count == 0)
				Response.Redirect("~/");

			if (!IsPostBack)
				this.LoadCarrinho();
		}

		private void LoadCarrinho()
		{
			if (Usuario.PedidoAtual.PedidoItems.Count > 0)
			{
				rptCarrinho.DataSource = Usuario.PedidoAtual.PedidoItems;
				rptCarrinho.DataBind();

				pnlNotVazio.Visible = true;
				pnlVazio.Visible = false;

				if (Usuario.IsLogged)
				{
					txtCEP.Text = Usuario.Objeto.CEP;
					this.CalculaFrete();
				}
				else
				{
					if (!string.IsNullOrEmpty(Usuario.CepEntrega))
					{
						txtCEP.Text = Usuario.CepEntrega;
						this.CalculaFrete();
					}
				}


			}
			else
			{
				pnlVazio.Visible = true;
				pnlNotVazio.Visible = false;
			}
		}

		protected void rptCarrinho_ItemDataBound(object sender, RepeaterItemEventArgs e)
		{
			var item = e.Item.DataItem as PedidoItem;

			if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
			{
				if (item != null)
				{
					Literal litNome = e.Item.FindControl("litNome") as Literal;
					Literal litPreco = e.Item.FindControl("litPreco") as Literal;
					LinkButton lnkRemove = e.Item.FindControl("lnkRemove") as LinkButton;

					WSRegistroControleEstoqueProdutos.Product produto = EstoqueServices.ReturnProductInfo(item.idProduto);

					lnkRemove.CommandArgument = item.idProduto.ToString();
					litNome.Text = produto.Name;
					litPreco.Text = string.Format("{0:C}", produto.Price);
					_totalPedido += produto.Price;
				}
			}
			else
			{
				if (e.Item.ItemType == ListItemType.Header)
				{
					_totalPedido = 0;
				}
				else
				{
					if (e.Item.ItemType == ListItemType.Footer)
					{
						Literal litTotal = e.Item.FindControl("litTotal") as Literal;
						litTotal.Text = string.Format("{0:C}", _totalPedido);
						Session["ValorTotal"] = _totalPedido;
					}
				}
			}
		}

		protected void lnkRemove_Click(object sender, EventArgs e)
		{
			LinkButton lnkRemove = sender as LinkButton;
			if (lnkRemove != null)
			{
				int produtoID = Convert.ToInt32(lnkRemove.CommandArgument);
				Usuario.PedidoAtual.PedidoItems.RemoveAt(Usuario.PedidoAtual.PedidoItems.FindIndex(a => a.idProduto == produtoID));
				this.LoadCarrinho();
			}
		}

		protected void btnCalcular_Click(object sender, EventArgs e)
		{
			if (Page.IsValid)
				CalculaFrete();
		}

		protected void btnProximoPasso_Click(object sender, EventArgs e)
		{
			Response.Redirect("~/InformacoesCliente.aspx");
		}

		private void CalculaFrete()
		{
			float totalPeso = 0;
			double totalVolume = 0;
			Endereco1.BuscaCEP(txtCEP.Text);
			int cep = Convert.ToInt32(txtCEP.Text.Replace("-", string.Empty).Replace(".", string.Empty));
			Usuario.CepEntrega = txtCEP.Text;
			int modoEntrega = Convert.ToInt32(rblTipo.SelectedValue);


			Usuario.PedidoAtual.PedidoItems.ForEach(a =>
			{
				WSDetalheProduto.ProdutoSimplificado produto = DetalheProdutoServices.buscaSimplificada(a.idProduto);

				if (produto.peso.HasValue)
					totalPeso += produto.peso.Value;

				if (produto.largura.HasValue &&
					produto.comprimento.HasValue &&
					produto.altura.HasValue)
					totalVolume += ((produto.largura.Value / 100) * (produto.comprimento.Value / 100) * (produto.altura.Value / 100));
			});


			if (Convert.ToBoolean(ConfigurationManager.AppSettings["IsWifi"]))
				LogisticaService.Url = "http://localhost:8680/c06/services/C06_Logistica?wsdl";

			string[] array = LogisticaService.calculaFrete(Convert.ToInt32(Math.Ceiling(totalPeso)), totalVolume, cep, modoEntrega);

			if (array.Length > 2)
			{
				//Usuario.PedidoAtual.codRastreamento = array[1];
				double x = Convert.ToDouble(Convert.ToString(array[1]).Replace(".", ","));
				litValorFrete.Text = string.Format(litValorFrete.Text, string.Format("{0:C}", x));
				litTempoFrete.Text = string.Format(litTempoFrete.Text, array[2]);
				pnlFreteResultado.Visible = true;
			}


			Session["TotalPeso"] = totalPeso;
			Session["TotalVolume"] = totalVolume;
			Session["Meio"] = modoEntrega;


		}

	}
}